Lịch sử GNU_C_Library

Dự án glibc ban đầu được viết chủ yếu bởi Roland McGrath, làm việc cho Free Software Foundation (FSF) trong những năm 1980 khi còn thiếu niên.[3]

Tháng 2 năm 1988, FSF mô tả glibcgần như đã hoàn thành chức năng theo yêu cầu của ANSI C.[4] Đến năm 1992, nó đã triển khai các chức năng ANSI C-1989 và POSIX.1-1990 và công việc đang được tiến hành trên POSIX.2.[5]

Tháng 9 năm 1995 Ulrich Drepper đã có đóng góp đầu tiên của mình cho dự án glibc và trong những năm 1990 đã dần trở thành người đóng góp và duy trì cốt lõi của glibc. Drepper giữ vị trí bảo trì trong nhiều năm và cho đến năm 2012 đã tích lũy được 63% tổng số cam kết cho dự án.[6]

Linux libc

Đầu những năm 1990, các nhà phát triển nhân Linux đã phân nhánh glibc. Fork của họ, "Linux libc", được duy trì riêng biệt.

Khi FSF phát hành glibc 2.0 vào tháng 1 năm 1997, các nhà phát triển hạt nhân đã ngừng Linux libc do sự tuân thủ vượt trội của glibc 2.0 với chuẩn POSIX.[7] glibc 2.0 cũng có khả năng quốc tế hóa tốt hơn và dịch chuyên sâu hơn, khả năng IPv6, truy cập dữ liệu 64-bit, tiện ích cho các ứng dụng đa luồng, khả năng tương thích với phiên bản trong tương lai và mã cơ động hơn.[8]

Phiên bản Linux libc được sử dụng cuối cùng đã sử dụng tên nội bộ (soname) libc.so.5. Tiếp theo từ điều này, glibc 2.x trên Linux sử dụng soname libc.so.6[9] (kiến trúc Alpha và IA64 bây giờ dùng libc.so.6.1, thay thế). Tên file *.so thường được viết tắt là libc6 (ví dụ trong tên gói trong Debian) theo quy ước thông thường cho các thư viện.

Theo Richard Stallman, FSF không thể hợp nhất những thay đổi được thực hiện trong Linux libc thành glibc do quyền tác giả mơ hồ. Dự án GNU khá nghiêm ngặt về bản quyềntác quyền.[10]

Thành lập ban chỉ đạo

Bắt đầu từ năm 2001, sự phát triển của thư viện đã được giám sát bởi một ủy ban,[11] với Ulrich Drepper[12] giữ vai trò là người đóng góp và bảo trì chính. Việc thành lập ban chỉ đạo bị bao vây bởi một cuộc tranh cãi công khai vì nó được Ulrich Drepper mô tả công khai là một việc tiếp quản thù địch thất bại của Richard Stallman.[13][14]

Chuyển sang Git, một phân phối VCS

Trong khi trước đó lưu trong kho CVS, năm 2009 glibc đã chuyển sang Git (một hệ thống kiểm soát phiên bản phân tán) trên Sourceware.

Debian chuyển sang EGLIBC và quay lại

Sau những tranh cãi kéo dài xung quanh phong cách lãnh đạo của Drepper và sự chấp nhận đóng góp từ bên ngoài,[15][16] Debian đã công khai chuyển sang glibc fork EGLIBC năm 2009,[17] và quay trở lại với Debian 8.0 (Jessie) tháng 4 năm 2015.

Giải tán Ban chỉ đạo

tháng 3 năm 2012, ban chỉ đạo đã bỏ phiếu để tự giải tán và loại bỏ Drepper để ủng hộ quy trình phát triển dựa vào cộng đồng, với Ryan Arnold, Maxim Kuvyrkov, Joseph Myers, Carlos O'Donell, và Alexandre Oliva giữ trách nhiệm bảo trì GNU (nhưng không có thêm quyền ra quyết định).[18][19]

Sau sự thay đổi về bảo trì glibc, Debian và các dự án khác vốn đã chuyển sang các giải pháp thay thế đã quay lại với glibc.[20] Từ đầu năm 2014, the glibc fork EGLIBC không còn được phát triển vì "các mục tiêu hiện đang được giải quyết trực tiếp trong GLIBC".

Tháng 7 năm 2017, 30 năm sau khi bắt đầu glibc, Roland McGrath tuyên bố ra đi, "tuyên bố bản thân là người duy trì danh dự và rút khỏi tham gia trực tiếp vào dự án. Những tháng qua, nếu không phải là vài năm trước, đã chứng minh rằng bạn không cần tôi nữa ".[3]

Lịch sử phiên bản

Với phần lớn các hệ thống, các phiên bản của glibc có thể được lấy bằng cách thực thi tệp lib (ví dụ, /lib/libc.so.6).

Phiên bảnNgàyGhi chúTiếp nhận
0.1 – 0.6October 1991 – February 1992
1.0February 1992
1.01 – 1.09.3March 1992 – December 1994
1.90 – 1.102May 1996 – January 1997
2.0January 1997
2.0.1January 1997
2.0.2February 1997
2.0.91December 1997
2.0.95July 1998
2.1February 1999
2.1.1March 1999
2.2November 2000
2.2.1January 2001
2.2.2February 2001
2.2.3March 2001
2.2.4July 2001
2.3October 2002
2.3.1October 2002
2.3.2February 2003Debian 3.1 (Sarge)
2.3.3December 2003
2.3.4December 2004Standard for Linux Standard Base (LSB) 3.0RHEL 4 (Update 5)
2.3.5April 2005SLES 9
2.3.6November 2005Debian 4.0 (Etch)
2.4March 2006Standard for LSB 4.0, initial inotify supportSLES 10
2.5September 2006Full inotify supportRHEL 5
2.6May 2007
2.7October 2007Debian 5 (Lenny), Ubuntu 8.04
2.8April 2008
2.9November 2008
2.10May 2009
2.11October 2009SLES 11, Ubuntu 10.04, eglibc used in Debian 6 (Squeeze)
2.12May 2010RHEL 6
2.13January 2011eglibc 2.13 used in Debian 7 (Wheezy)
2.14June 2011
2.15March 2012Ubuntu 12.04 and 12.10
2.16June 2012x32 ABI support, ISO C11 compliance, SystemTap
2.17December 201264-bit ARM supportUbuntu 13.04, RHEL 7
2.18August 2013Improved C++11 support. Support for Intel TSX lock elision. Support for the Xilinx MicroBlaze and IBM POWER8 microarchitectures.Fedora 20
2.19February 2014SystemTap probes for malloc. GNU Indirect Function (IFUNC) support for ppc32 and ppc64. New feature test macro _DEFAULT_SOURCE to replace _SVID_SOURCE and _BSD_SOURCE. Preliminary safety documentation for all functions in the manual. ABI change in ucontext and jmp_buf for s390/s390x.Ubuntu 14.04, eglibc 2.19 used in Debian 8 (Jessie), openSUSE 13, SLES 12
2.20September 2014Support for file description locksFedora 21
2.21February 2015New semaphore implementationUbuntu 15.04, Fedora 22
2.22August 2015Support to enable Google Native Client (NaCl), that originally ran on x86, running on ARMv7-A, Unicode 7.0Fedora 23
2.23February 2016Unicode 8.0Fedora 24, Ubuntu 16.04
2.24August 2016Some deprecated features have been removedFedora 25, Ubuntu 16.10 and 17.04, Debian 9 (Stretch)
2.25February 2017The getentropy and getrandom functions, and the <sys/random.h> header file have been added.Fedora 26
2.26August 2017Improved performance (per-thread cache for malloc), Unicode 10 supportFedora 27, Ubuntu 17.10
2.27February 2018Performance optimizations. RISC-V support.Fedora 28, Ubuntu 18.04
2.28August 2018statx, renameat2, Unicode 11.0.0Ubuntu 18.10,[21] RHEL 8.0.0,[22] Debian 10 (Buster),[23] Fedora 29[24][25]
2.29February 2019
  • getcpu wrapper
  • build and install all locales as directories with files
  • optimized trigonomical functions
  • Transactional Lock Elision for powercp64le ABI
  • posix_spawn_file_actions_addchdir_np and posix_spawn_file_actions_addfchdir_np
  • popen and system do not run atfork handlers anymore
  • support for the C-SKY ABIV2 running on Linux
  • strftime's default formatting of a locale's alternative year; the '_' and '-' flags can now be applied to its "%EY"[26]
Ubuntu 19.04,[27] Fedora 30[28][29]
2.30August 2019Unicode 12.1.0, the dynamic linker accepts the --preload argument to preload shared objects, the gettid function has been added on Linux, Minguo (Republic of China) calendar support, new Japanese era added to ja_JP locale, memory allocation functions fail with total object size larger than PTRDIFF_MAX; CVE- fixed[30]Ubuntu 19.10,[31] Fedora 31[32]
2.31February 2020Initial C2x standard supportUbuntu 20.04,[33] Fedora 32[34]
2.32August 2020Unicode 13.0, 'access' attribute for better warnings in GCC 10, i.e. to "help detect buffer overflows and other out-of-bounds accesses"[35]

Tài liệu tham khảo

WikiPedia: GNU_C_Library http://linuxmafia.com/faq/Licensing_and_Law/forkin... http://linuxmafia.com/faq/Licensing_and_Law/forkin... http://wiki.openmoko.org/wiki/OpenMoko http://ecos.sourceware.org/ml/libc-alpha/2002-01/m... https://csclub.uwaterloo.ca/~dtbartle/opensolaris/ https://github.com/haiku/haiku/tree/master/src/sys... https://www.linkedin.com/in/ulrichdrepper https://www.linux.com/archive/feature/3874 https://udrepper.livejournal.com/7326.html https://access.redhat.com/documentation/en-us/red_...